! function(e) {
	"object" != typeof JSON && (JSON = {}),
		"use strict";

	function f(e) {
		return e < 10 ? "0" + e : e
	}

	function this_value() {
		return this.valueOf()
	}

	function quote(e) {
		return rx_escapable.lastIndex = 0, rx_escapable.test(e) ? '"' + e.replace(rx_escapable, function(e) {
			var t = meta[e];
			return "string" == typeof t ? t : "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4)
		}) + '"' : '"' + e + '"'
	}

	function str(e, t) {
		var n, r, o, i, a, s = gap,
			c = t[e];
		switch(c && "object" == typeof c && "function" == typeof c.toJSON && (c = c.toJSON(e)), "function" == typeof rep && (c = rep.call(t, e, c)), typeof c) {
			case "string":
				return quote(c);
			case "number":
				return isFinite(c) ? String(c) : "null";
			case "boolean":
			case "null":
				return String(c);
			case "object":
				if(!c) return "null";
				if(gap += indent, a = [], "[object Array]" === Object.prototype.toString.apply(c)) {
					for(i = c.length, n = 0; n < i; n += 1) a[n] = str(n, c) || "null";
					return o = 0 === a.length ? "[]" : gap ? "[\n" + gap + a.join(",\n" + gap) + "\n" + s + "]" : "[" + a.join(",") + "]", gap = s, o
				}
				if(rep && "object" == typeof rep)
					for(i = rep.length, n = 0; n < i; n += 1) "string" == typeof rep[n] && (r = rep[n], o = str(r, c), o && a.push(quote(r) + (gap ? ": " : ":") + o));
				else
					for(r in c) Object.prototype.hasOwnProperty.call(c, r) && (o = str(r, c), o && a.push(quote(r) + (gap ? ": " : ":") + o));
				return o = 0 === a.length ? "{}" : gap ? "{\n" + gap + a.join(",\n" + gap) + "\n" + s + "}" : "{" + a.join(",") + "}", gap = s, o
		}
	}
	var rx_one = /^[\],:{}\s]*$/,
		rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
		rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
		rx_four = /(?:^|:|,)(?:\s*\[)+/g,
		rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
		rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
	"function" != typeof Date.prototype.toJSON && (Date.prototype.toJSON = function() {
			return isFinite(this.valueOf()) ? this.getUTCFullYear() + "-" + f(this.getUTCMonth() + 1) + "-" + f(this.getUTCDate()) + "T" + f(this.getUTCHours()) + ":" + f(this.getUTCMinutes()) + ":" + f(this.getUTCSeconds()) + "Z" : null
		},
		Boolean.prototype.toJSON = this_value,
		Number.prototype.toJSON = this_value,
		String.prototype.toJSON = this_value);
	var gap, indent, meta, rep;
	"function" != typeof JSON.stringify && (meta = {
				"\b": "\\b",
				"\t": "\\t",
				"\n": "\\n",
				"\f": "\\f",
				"\r": "\\r",
				'"': '\\"',
				"\\": "\\\\"
			},
			JSON.stringify = function(e, t, n) {
				var r;
				if(gap = "", indent = "", "number" == typeof n)
					for(r = 0; r < n; r += 1) indent += " ";
				else "string" == typeof n && (indent = n);
				if(rep = t, t && "function" != typeof t && ("object" != typeof t || "number" != typeof t.length)) throw new Error("JSON.stringify");
				return str("", {
					"": e
				})
			}),
		"function" != typeof JSON.parse && (JSON.parse = function(text, reviver) {
			function walk(e, t) {
				var n, r, o = e[t];
				if(o && "object" == typeof o)
					for(n in o) Object.prototype.hasOwnProperty.call(o, n) && (r = walk(o, n), void 0 !== r ? o[n] = r : delete o[n]);
				return reviver.call(e, t, o)
			}
			var j;
			if(text = String(text), rx_dangerous.lastIndex = 0, rx_dangerous.test(text) && (text = text.replace(rx_dangerous, function(e) {
					return "\\u" + ("0000" + e.charCodeAt(0).toString(16)).slice(-4)
				})), rx_one.test(text.replace(rx_two, "@").replace(rx_three, "]").replace(rx_four, ""))) return j = eval("(" + text + ")"), "function" == typeof reviver ? walk({
				"": j
			}, "") : j;
			throw new SyntaxError("JSON.parse")
		})
}(window, void 0);